public String convert(String s, int numRows){ if (numRows==1)return s; int len=s.length(); StringBuilder ans=new StringBuilder(); // 一个循环长度(Z字形两次方向变换,即向下写到numRows行方向变化为向上再写到0行的长度) int cycleLen=2*numRows-2; // 0-numRows行 for (int i=0;i<numRows;i++){ for (int j=0;j+i<len;j+=cycleLen){ ans.append(s.charAt(j+i)); // 当不是第0行且不是第numRows-1行且当前行下一个字符在原字符串中存在时,将当前行下一个字符加入结果串 // 防止遗漏中间行的字符 if (i!=0&&i!=numRows-1&&j+cycleLen-i<len) ans.append(s.charAt(j+cycleLen-i)); } } return ans.toString(); }